package futbolfacil.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import futbolfacil.excepcion.DAOExcepcion;
import futbolfacil.modelo.Local;
import futbolfacil.modelo.ServicioAdicional;
import futbolfacil.util.ConexionBD;

public class ServicioAdicionalDAO extends BaseDAO {
//Felix Paragulla
	public void insertar(ServicioAdicional objServicio) throws DAOExcepcion {
		System.out.println("ServicioAdicionalDAO: insertar(ServicioAdicional objServicio)");
		
		validarDatos(objServicio);		
		validarDuplicado(objServicio);
		
		String query = "INSERT INTO articulo(art_des, art_pre,art_car, art_stk,cat_cod, loc_cod) " +
						"VALUES (?,?,?,?,1,1)";
		Connection con = null;
		PreparedStatement stmt = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);		
			stmt.setString(1, objServicio.getNomserv());
			stmt.setDouble(2, objServicio.getPrecio());
			stmt.setString(3, objServicio.getServcar());
			stmt.setInt(4, objServicio.getStock());
			//stmt.setInt(4, objServicio.getCategoriaServ().getCodigoCategoria());
			//stmt.setInt(5, objServicio.getLocalCancha().getCodigoLocal());
			int i = stmt.executeUpdate();			
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			System.out.println("Servicio Registrado. \n");
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	private void validarDatos(ServicioAdicional objServicio) throws DAOExcepcion {
		System.out.println("ServicioAdicionalDAO: validarDatos(ServicioAdicional objServicio)");
		
		String msg = "";

		if(objServicio.getNomserv().trim().equals(""))
			msg += "El nombre del servicio no puede ser vacio. \n";		
		if(("" + objServicio.getStock()).trim().equals(""))
			msg += "El stock del servicio no puede ser vacio. \n";	
		if(!msg.equals("")) {//Si exite algun error lanza excepcion
			System.out.println("Error: \n" + msg);
			throw new DAOExcepcion(msg);
		}	
	}
	
	private void validarDuplicado(ServicioAdicional objServicio) throws DAOExcepcion {
		System.out.println("ServicioAdicionalDAO: validarDuplicado(ServicioAdicional objServicio)");
		
		String msg = "";
		
		if(existe("art_des", objServicio.getNomserv()))
			msg += "Descripcion: " + objServicio.getNomserv() + " ya existe. \n";
		if(!msg.equals("")) {//Si exite algun error lanza excepcion
			System.out.println("Error: \n" + msg);
			throw new DAOExcepcion(msg);
		}
	}
	
	private boolean existe(String campo, String valor) {
		System.out.println("ServicioAdicionalDAO: existe(String campo, String valor)");
		
		String query = "SELECT * FROM articulo WHERE "+ campo +" = ?";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, valor);
			rs = stmt.executeQuery();
			
			if (rs.next()){
				return true;
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		return false;
	}

	public ServicioAdicional buscarPorCodigoServ(int codigo) throws DAOExcepcion {
		
		System.out.println("ServicioAdicionalDAO: buscarPorCodigoServ(int codigo)");
		ServicioAdicional objServicioAdicional = new ServicioAdicional();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "Select * From articulo Where art_cod = ?";
			con = ConexionBD.obtenerConexion();
			stmt=con.prepareStatement(query);
			stmt.setInt(1, codigo);
			rs = stmt.executeQuery();
			if (rs.next()) {
				objServicioAdicional.setCodserv(rs.getInt("art_cod"));
				objServicioAdicional.setNomserv(rs.getString("art_des"));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return objServicioAdicional;
	}
}
